/*
 * Consumer.java
 *
 * Created on 25 de junio de 2007, 16:15
 *
 * To change this template, choose Tools | Template Manager
 * and open the template in the editor.
 */

package ingredientsClient;

import Modelo.Busqueda;
import Modelo.Util;
import java.io.ByteArrayOutputStream;

import java.util.Vector;
import javax.xml.soap.SOAPMessage;



/**
 *
 * @author MiNiNo
 */
public class Consumer {
    
    /** Creates a new instance of Consumer */
    public Consumer() {
    }
    
    public Busqueda busqueda(Vector tags){
        
        // creo el mensaje
        SoapMessage message = new SoapMessage();
        SoapMethod method = null;
        // creo un metodo
        if(tags.size() == 1){
                method = new SoapMethod( "simpleTagSearch", "ser", "http://servicio/" );
                method.addParameter( new SoapParameter( "arg0", (String)tags.get(0) ));
            }
        else{
            // <negrada>
            String result;
            String javadeltoor = "";
            for(int i=0; i < tags.size(); i++){
                javadeltoor += tags.get(i) + ";" ;
            }
            // </negrada>
            method = new SoapMethod( "multipleTagSearch", "ser", "http://servicio/" );
            method.addParameter( new SoapParameter( "arg0", javadeltoor  ) );
        }
        
               
        try
        {
            //agrego el metodo al mensaje
            message.addMethod( method );
        }
        catch( Exception ex )
        {
            System.err.println( "could not create message " + ex.toString() );
            System.exit( -1 );
        }

        // creo el cliente que consume el ws apuntando a mi host
        // lo que puede ser cambiado :)
        Client client = new Client( "http://" + Util.getServer() + "/Gpi/Servicio", "Servicio", "ServicioPort", "http://" + Util.getServer() + "/Gpi/Servicio" );
        
        // invoco el metodo pidiendole a message que genere el xml
        SOAPMessage response = client.invoke( message.getMessage() );
        
        ByteArrayOutputStream baos = new ByteArrayOutputStream();
        try
        {
            // imprimo la salida
            response.writeTo( baos );
            
            String result = response.getSOAPBody().getElementsByTagName("return").item(0).getTextContent();
            
            Busqueda b = Busqueda.fromXml(result);
            
            return b;
        }
        catch( Exception ex )
        {
            // mensaje estilo "gato" :P
            System.err.println( "error masivo" );
            ex.printStackTrace();
            //System.exit( -1 );
        }
       
        return null;
    }
    
    public String getFile(int id){
        
        // creo el mensaje
        SoapMessage message = new SoapMessage();
        // creo un metodo
        SoapMethod method = new SoapMethod( "download", "ser", "http://servicio/" );
        // le agrego los parametros al metodo
        method.addParameter( new SoapParameter( "arg0", ""+id ) );
                
        try
        {
            //agrego el metodo al mensaje
            message.addMethod( method );
        }
        catch( Exception ex )
        {
            System.err.println( "could not create message " + ex.toString() );
            System.exit( -1 );
        }
        
        // creo el cliente que consume el ws apuntando a mi host
        // lo que puede ser cambiado :)
        Client client = new Client( "http://" + Util.getServer() + "/Gpi/Servicio", "Servicio", "ServicioPort",  "http://" + Util.getServer() + "/Gpi/Servicio" );
        
        // invoco el metodo pidiendole a message que genere el xml
        SOAPMessage response = client.invoke( message.getMessage() );
        
        
        try{
            
            response.writeTo(System.out); //debuggin
            
            String fileContent = response.getSOAPBody().getElementsByTagName("return").item(0).getTextContent();

            return fileContent;
        }
        catch( Exception ex ){
            // mensaje estilo "gato" :P
            System.err.println( "error masivo" );
            System.exit( -1 );
        }
        
       return null;
        
    }
    
    public boolean sendFile( String fileXML, boolean recipe ){
        
        // creo el mensaje
        SoapMessage message = new SoapMessage();
        // creo un metodo
        SoapMethod method = new SoapMethod( "upload", "ser", "http://servicio/" );
        // le agrego los parametros al metodo
        method.addParameter( new SoapParameter( "arg0", fileXML ) );
        method.addParameter( new SoapParameter( "arg1", ""+recipe ) );
                
        try
        {
            //agrego el metodo al mensaje
            message.addMethod( method );
        }
        catch( Exception ex )
        {
            System.err.println( "could not create message " + ex.toString() );
            System.exit( -1 );
        }
        try{
            // un poco de debug
            System.out.println( message.toString() );
            // creo el cliente que consume el ws apuntando a mi host
            // lo que puede ser cambiado :)
            Client client = new Client( "http://" + Util.getServer() + "/Gpi/Servicio", "Servicio", "ServicioPort",  "http://" + Util.getServer() + "/Gpi/Servicio" );

            // invoco el metodo pidiendole a message que genere el xml
            SOAPMessage response = client.invoke( message.getMessage() );

            response.writeTo(System.out); //debuggin

            String result = response.getSOAPBody().getElementsByTagName("return").item(0).getTextContent();
            if(result.equalsIgnoreCase("true")){
                return true;
            }
        }
        catch( Exception ex ){
            // mensaje estilo "gato" :P
            System.err.println( "error masivo" );
            ex.printStackTrace();
            //System.exit( -1 );
        }
        
        return false;
    }
        
    
    
}
